package com.link.serve.tcp.encoder;// 编码器
import com.link.serve.tcp.message.Message;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;

//handler->yewu
//im业务方去调用长连接平台提供的消息推送grpc接口（proto文件）
//json -> proto -> grpc 长连接平台 消息推送->前端做解码+ui刷新
public class MessageEncoder extends MessageToByteEncoder<Message> {
    @Override
    protected void encode(ChannelHandlerContext ctx, Message msg, ByteBuf out) throws Exception {
        out.writeInt(msg.getPacketBoundary()); // 写入包边界，便于解析器识别数据包起点
        out.writeInt(msg.getVersion()); // 写入协议版本号，支持未来的版本升级

        byte[] headerBytes = msg.getHeader().toByteArray(); // 序列化消息头为字节数组
        byte[] bodyBytes = msg.getBody().toByteArray(); // 序列化消息体为字节数组

        out.writeInt(headerBytes.length); // 写入包头长度，便于接收方解析
        out.writeInt(bodyBytes.length); // 写入包体长度，便于接收方解析

        out.writeBytes(headerBytes); // 写入包头数据
        out.writeBytes(bodyBytes); // 写入包体数据
    }
}